/**
 * 存储数据到LocalStorage或SessionStorage
 * @param key - 存储数据的键名
 * @param value - 存储的数据
 * @param isSession - 如果为true，则存储在SessionStorage，否则存储在LocalStorage
 */
export const setItem = (key: string, value: any, isSession: boolean): void => {
  const storage = isSession ? sessionStorage : localStorage;
  storage.setItem(key, JSON.stringify(value));
};

/**
 * 存储数据到LocalStorage
 * @param key - 存储数据的键名
 * @param value - 存储的数据
 */
export const setItemLocalStorage = (key: string, value: any): void => {
  localStorage.setItem(key, JSON.stringify(value));
};

/**
 * 存储数据到SessionStorage
 * @param key - 存储数据的键名
 * @param value - 存储的数据
 */
export const setItemSessionStorage = (key: string, value: any): void => {
  sessionStorage.setItem(key, JSON.stringify(value));
};

/**
 * 获取LocalStorage或SessionStorage中的数据
 * @param key - 要获取数据的键名
 * @param isSession - 如果为true，则从SessionStorage获取，否则从LocalStorage获取
 * @returns 存储的数据，如果不存在则返回null
 */
export const getItem = (key: string, isSession: boolean): any => {
  const storage = isSession ? sessionStorage : localStorage;
  const item = storage.getItem(key);
  return item ? JSON.parse(item) : null;
};

/**
 * 获取LocalStorage中的数据
 * @param key - 要获取数据的键名
 * @returns 存储的数据，如果不存在则返回null
 */
export const getItemLocalStorage = (key: string): any => {
  const item = localStorage.getItem(key);
  return item ? JSON.parse(item) : null;
};

/**
 * 获取SessionStorage中的数据
 * @param key - 要获取数据的键名
 * @returns 存储的数据，如果不存在则返回null
 */
export const getItemSessionStorage = (key: string): any => {
  const item = sessionStorage.getItem(key);
  return item ? JSON.parse(item) : null;
};

/**
 * 更新LocalStorage或SessionStorage中的数据
 * @param key - 要更新数据的键名
 * @param updater - 更新函数，接受当前值并返回新值
 * @param isSession - 如果为true，则从SessionStorage更新，否则从LocalStorage更新
 */
export const updateItem = (key: string, updater: (value: any) => any, isSession: boolean): void => {
  const storage = isSession ? sessionStorage : localStorage;
  const item = storage.getItem(key);
  if (item) {
    const currentValue = JSON.parse(item);
    const updatedValue = updater(currentValue);
    storage.setItem(key, JSON.stringify(updatedValue));
  }
};

/**
 * 更新LocalStorage中的数据
 * @param key - 要更新数据的键名
 * @param updater - 更新函数，接受当前值并返回新值
 */
export const updateItemLocalStorage = (key: string, updater: (value: any) => any): void => {
  const item = localStorage.getItem(key);
  if (item) {
    const currentValue = JSON.parse(item);
    const updatedValue = updater(currentValue);
    localStorage.setItem(key, JSON.stringify(updatedValue));
  }
};

/**
 * 更新SessionStorage中的数据
 * @param key - 要更新数据的键名
 * @param updater - 更新函数，接受当前值并返回新值
 */
export const updateItemSessionStorage = (key: string, updater: (value: any) => any): void => {
  const item = sessionStorage.getItem(key);
  if (item) {
    const currentValue = JSON.parse(item);
    const updatedValue = updater(currentValue);
    sessionStorage.setItem(key, JSON.stringify(updatedValue));
  }
};
